# -*- coding: cp1252 -*-
import random
from Class_Evento import *
from Class_ConexaoDB  import *
from Class_GerenciadorUsuario import *

class GerenciadorEvento:
    def __init__(self):
        self.Conexao = ConexaoDB()
    
    #metodo para cadastrar o evento por completo no banco de dados
    #Retorna - True ou False
    def CadastrarEvento(self, Evento):
        Nome = Evento.GetNome()
        Data = Evento.GetData()
        Horario = Evento.GetHorario()
        Url = self.GeradorUrl(Nome)
        faixa_etaria = self.VerificarIdFaixaEtaria(Evento.GetFaixaEtaria())
        tipo_evento = self.VerificarIdTipoEvento(Evento.GetTipo())
        IdOrganizador = Evento.GetOrganizador().GetID()

        
        
        comando = '''
INSERT INTO Evento (nome, data, horario, id_faixa_etaria, id_tipo, id_organizador, url) VALUES ('%s','%s','%s','%s','%s','%s','%s')
'''%(Nome, Data, Horario, faixa_etaria, tipo_evento, IdOrganizador, Url)
        confirmacao = self.Conexao.ExecutarComando(comando)

        
        return confirmacao

    #Metodo para pesquisar todos os Eventos de um determinado usuario
    def PesquisarEventosPorUsuario(self, Usuario):
        IdUsuario = Usuario.GetID()

        comando = '''
SELECT * FROM Evento WHERE Id_Organizador LIKE '%s'
'''%(IdUsuario)

        dados = self.Conexao.ExecutarComandoRetorno(comando)

        return dados

    #Metodo para pesquisar um unico evento pelo ID
    def PesquisarEventoPorID(self, ID):
        comando = '''
SELECT * FROM Evento WHERE Id LIKE '%s'
'''%(ID)

        dados = self.Conexao.ExecutarComandoRetorno(comando)

        return dados
    
    def PesquisarEventoPorUrl(self, url):
        comando ='''
SELECT * FROM Evento WHERE url LIKE '%s'
'''%(url)
        
        dados = self.Conexao.ExecutarComandoRetorno(comando)
        
        return dados

    def ExcluirEvento(self, ID):
        

        comando = '''
DELETE FROM Evento_Recurso WHERE Id_Evento = '%s'
'''%(ID)
        confirmacao = self.Conexao.ExecutarComando(comando)
        

        comando = '''
DELETE FROM Evento WHERE Id = '%s'
'''%(ID)
        
        confirmacao = self.Conexao.ExecutarComando(comando)
        print confirmacao
        return confirmacao
        
        #--------- funcoes auxiliares --------------

    #gera Urls para os eventos e verifica para nao haver duplicadas
    def GeradorUrl(self, NomeEvento):
        
        BasicUrl = 'http://www.baco.com.br/'
        NomeEvento = self.RetirarEspacosNomeEvento(NomeEvento)

        numbers = str(random.random())
        url = BasicUrl+numbers[2:]+'/'+NomeEvento+'.html'
            
        comando ='''
SELECT url FROM evento WHERE url = '%s'
'''%(url)

        lista = self.Conexao.ExecutarComandoRetorno(comando)
        print str(lista)
        if len(lista) == 0:
            return url
        else:
            self.GeradorUrl()

    #metodo para pegar a faixa etaria pelo nome e retornar o id para cadastrar chave estrangeira
    def VerificarIdFaixaEtaria(self, faixa):
        comando ='''
SELECT id FROM faixa_etaria WHERE classificacao = '%s'
'''%(faixa)

        lista = self.Conexao.ExecutarComandoRetorno(comando)
        return lista[0][0]
    
    #metodo para pegar o tipo de evento pelo nome e retornar o id para cadastrar chave estrangeira
    def VerificarIdTipoEvento(self, tipo):
        comando ='''
SELECT id FROM tipo_evento WHERE nome = '%s'
'''%(tipo)

        lista = self.Conexao.ExecutarComandoRetorno(comando)
        return lista[0][0]
    
    #metodo para pegar o organizador pelo nome e retornar o id para cadastrar chave estrangeira
    def VerificarIdOrganizador(self, nome):
        comando ='''
SELECT id FROM usuario WHERE nome = '%s'
'''%(nome)

        lista = self.Conexao.ExecutarComandoRetorno(comando)
        return lista[0][0]

    def RetirarEspacosNomeEvento(self, NomeEvento):
        Nome = NomeEvento
        try:
            Espaco = Nome.index(' ')
        except ValueError:
            Espaco = -1

        if Espaco != -1:
            Nome = Nome[:Espaco] + Nome[Espaco+1].upper() + Nome[Espaco+2:]
            
            Nome = self.RetirarEspacosNomeEvento(Nome)

        
        return Nome
